package k1_jdbc.demo02.deptEmpoperation;

import k1_jdbc.tool.ConnectionTool;
import k1_jdbc.tool.Const;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.List;

public class DeptEmpOperation {

    public static void main(String[] args) {

        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        List<Map<String,Object>> empDeptList = new ArrayList<>();

        try {

            Class.forName(Const.DRIVER);
            conn = DriverManager.getConnection(Const.URL_TEST, Const.USERNAME, Const.PASSWORD);

            String sql = "select empNo,ename,salary,dname,loc from emps as e " +
                    "left join dept as d " +
                    "on e.deptno=d.deptno " +
                    "where empNo<=10";

            ps = conn.prepareStatement(sql);

            rs = ps.executeQuery();

            //获取结果集的元数据
            ResultSetMetaData rsmd = rs.getMetaData();
            //获取每条数据有多少列，也就是一个Map中有多少个键值对
            int columnCount= rsmd.getColumnCount();

            //每执行一次while，就是一条数据
            while(rs.next()){
                //每一条数据就是一个Map
                Map<String,Object> empDept = new HashMap<>();

                //需要对 从第一列开始到 columnCount 列 的键值对进行封装
                for (int i = 1; i <= columnCount ; i++) {
                    //对表示一条数据的Map进行封装键值对，key是字段名，value是对应的值
                    empDept.put(rsmd.getColumnName(i),rs.getObject(i));
                }
                //一条数据封装完毕后，需要把这条数据添加到列表中
                empDeptList.add(empDept);
            }

            //遍历输出结果集中的数据
            for (Map<String, Object> empDept : empDeptList) {
                for (Map.Entry<String, Object> entry : empDept.entrySet()) {
                    System.out.println(entry.getKey()+"==="+entry.getValue());
                }
                System.out.println("===============================================");
            }


        }catch (Exception e){
            e.printStackTrace();
        }finally {
            ConnectionTool.closed(conn,ps,rs);
        }

    }


}
